	FUNCTION IGETNTBI ( LUN, CTB )

C$$$  SUBPROGRAM DOCUMENTATION BLOCK
C
C SUBPROGRAM:    IGETNTBI
C   PRGMMR: ATOR            ORG: NP12       DATE: 2009-03-23
C
C ABSTRACT: THIS FUNCTION RETURNS THE NEXT AVAILABLE INDEX FOR
C   STORING AN ENTRY WITHIN INTERNAL BUFR TABLE CTB.
C
C PROGRAM HISTORY LOG:
C 2009-03-23  J. ATOR    -- ORIGINAL AUTHOR
C 2014-12-10  J. ATOR    -- USE MODULES INSTEAD OF COMMON BLOCKS
C
C USAGE:    CALL IGETNTBI ( LUN, CTB )
C   INPUT ARGUMENT LIST:
C     LUN      - INTEGER: I/O STREAM INDEX INTO INTERNAL MEMORY ARRAYS
C     CTB      - CHARACTER*1: INTERNAL BUFR TABLE FROM WHICH TO RETURN
C                THE NEXT AVAILABLE INDEX ('A','B', OR 'D')
C
C   OUTPUT ARGUMENT LIST:
C     IGETNTBI  - INTEGER: NEXT AVAILABLE INDEX IN TABLE CTB
C
C REMARKS:
C    THIS ROUTINE CALLS:        BORT
C    THIS ROUTINE IS CALLED BY: RDUSDX   READS3   STBFDX   STSEQ
C                               Not normally called by application
C                               programs.
C
C ATTRIBUTES:
C   LANGUAGE: FORTRAN 77
C   MACHINE:  PORTABLE TO ALL PLATFORMS
C
C$$$

	USE MODA_TABABD

	INCLUDE 'bufrlib.prm'

	CHARACTER*128 BORT_STR
	CHARACTER*1   CTB

C-----------------------------------------------------------------------
C-----------------------------------------------------------------------

	IF ( CTB .EQ. 'A' ) THEN
	  IGETNTBI = NTBA(LUN) + 1
	  IMAX = NTBA(0)
	ELSE IF ( CTB .EQ. 'B' ) THEN
	  IGETNTBI = NTBB(LUN) + 1
	  IMAX = NTBB(0)
	ELSE IF ( CTB .EQ. 'D' ) THEN
	  IGETNTBI = NTBD(LUN) + 1
	  IMAX = NTBD(0)
	ENDIF
	IF ( IGETNTBI .GT. IMAX ) GOTO 900

	RETURN
900	WRITE(BORT_STR,'("BUFRLIB: IGETNTBI - NUMBER OF INTERNAL TABLE'
     .    //'",A1," ENTRIES EXCEEDS THE LIMIT (",I4,")")') CTB, IMAX
	CALL BORT(BORT_STR)
	END
